package com.esunny.resourcevisualization.manage;

import com.esunny.resourcevisualization.dao.EnumGroupDao;
import com.esunny.resourcevisualization.dao.EnumItemDao;
import com.esunny.resourcevisualization.domain.entity.EnumItem;
import com.esunny.resourcevisualization.domain.request.EnumDto;
import com.esunny.resourcevisualization.domain.response.ReturnStructure;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

/**
 * @version 1.0.0.0
 * @ClassName EnumManage
 * @Description 枚举组、枚举项数据处理
 * @Author baochencong
 * @Date 2020/9/26 13:10
 */
@Component
public class EnumManage {

    private static Logger LOGGER = LoggerFactory.getLogger(EnumManage.class);

    @Resource
    private EnumGroupDao enumGroupDao;

    @Resource
    private EnumItemDao enumItemDao;

    /**
     * 添加枚举数据
     * @param enumDto 枚举组数据
     */
    public ReturnStructure addEnumData(EnumDto enumDto){
        boolean successAddEnumGroup = enumGroupDao.addEnumGroup(enumDto.getEnumGroup());
        if (successAddEnumGroup){
            List<EnumItem> enumItemList = enumDto.getEnumItemList();
            List<EnumItem> failedEnumItemList = new ArrayList<>();
            for (EnumItem item:enumItemList) {
                boolean successAddEnumItem = enumItemDao.addEnumItem(item);
                if (!successAddEnumItem){
                    failedEnumItemList.add(item);
                }
            }
            if (!failedEnumItemList.isEmpty()){
                LOGGER.error("添加枚举项失败的枚举项数据有：{}",failedEnumItemList);
                HashMap<String, List<EnumItem>> failedAddEnumItemMap = new HashMap<>(1);
                failedAddEnumItemMap.put("failedEnumItemList",failedEnumItemList);
                return ReturnStructure.ERROR("添加枚举组数据成功，枚举项部分数据添加失败",failedAddEnumItemMap);
            }
            return ReturnStructure.SUCCESS("添加枚举数据成功",null);
        }
        return ReturnStructure.ERROR("添加枚举组数据失败",null);
    }

    /**
     * 删除枚举组
     * @param groupName 枚举组英文名
     * @return 删除枚举组数据结果信息
     */
    public ReturnStructure deleteEnumData(String groupName){
        boolean successDeleteEnumGroup = enumGroupDao.deleteEnumGroupByGroupName(groupName);
        if (successDeleteEnumGroup){
            enumItemDao.deleteEnumItemByGroupName(groupName);
            return ReturnStructure.SUCCESS("删除枚举组所有数据成功",null);
        }
        return ReturnStructure.ERROR("删除枚举组数据失败",null);
    }

}
